//
//  ILBindCMFeatures.h
//  IMILabKit
//
//  Created by Roffa Zhou on 2022/7/13.
//
//  这里面主要实现了一些特殊逻辑
//  1.检查设备是否在线接口(绑定完成后),检查指定次数仍未在线,则移除该设备,针对场景:如果设备从一个服换绑到另一个服,设备会切换服务器,
//  这大概需要2s时间后设备才会上线,如果app端绑定完不检查设备在线状态,直接进入直播,是看不了的
//  2.发送设备服务消息,绑定完成后,向设备发送绑定成功/失败消息,

#import <Foundation/Foundation.h>
#import "ILBindDeviceModel.h"

NS_ASSUME_NONNULL_BEGIN
@class ILException;
//result:激活结果
//dataDic:网络返回结果
//error: 出错时错误信息，成功时返回nil
typedef void(^ILLinkCMFBlock)(BOOL result, NSDictionary * _Nullable dataDic, ILException * _Nullable error);

@interface ILBindCMFeatures : NSObject

/// 发送设备服务消息(绑定成功后)
/// @param 参数
/// @param retryCount 重试次数
/// @param completBlock 完成回调
/*
 @{
 @"iotId": did,
 @"identifier": identifier,
 @"args":  @{
            @"cmd": @1,
            @"product_key": @"",
            @"device_name": @"",
            @"result": @0 //0成功消息 2失败消息
            }
 }
 */
+ (void)invokeDeviceWithParam:(NSDictionary *)params retryCount:(NSInteger)retryCount completBlock:(ILLinkCMFBlock)completBlock;

/// 检查设备是否在线,2s尝试一次,直到最大尝试次数,不在线会移除设备
/// @param iotId iotId
/// @param retryCount 最大尝试次数
/// @param completBlock 完成回调
+ (void)checkDeviceOnlineStateWithIotId:(NSString *)iotId retryCount:(NSInteger)retryCount completBlock:(ILLinkCMFBlock)completBlock;

/// 获取homeId
/// @param config ILDeviceBindHomeConfigDefault:如果用户没有创建家,调用这个接口会给用户创建家并返回homeId;
/// ILDeviceBindHomeConfigWithoutHome,会直接返回数据库中存储的homeId,如果用户没有创建家,调用这个接口不会给用户创建家,homeid会返回空字符串;
/// @param roomName 房间名称
/// @param retryCount 重试次数
/// @param completBlock 完成回调,成功时dataDic会返回homeId
+ (void)getHomeIdWithConfig:(ILDeviceBindHomeConfig)config roomName:(nonnull NSString *)roomName retryCount:(NSInteger)retryCount completBlock:(ILLinkCMFBlock)completBlock;

@end

NS_ASSUME_NONNULL_END
